1464. Простое задание

 

Для заданного целого числа n вычислите сумму всех целых чисел от 1 до n (включая 1 и n).

 

Вход. В каждой строке содержится единственное целое число n (|n| ≤ 10000). Последняя строка содержит 0 и не обрабатываться.

 

Выход. Для каждого значения n выведите ответ в отдельной строке.

 

Пример входа

Пример выхода

1

10

0

1

55

 

 

РЕШЕНИЕ

циклы

 

Анализ алгоритма

Входные данные содержат несколько тестов.

Входное значение n может быть как положительным, так и отрицательным. Для вычисления суммы воспользуемся формулой арифметической прогрессии.

Для положительного n сумма чисел от 1 до n равна (1 + n) * n / 2.

Для неположительного n (отрицательного и 0) количество чисел от 1 до n равно |n| + 2. Следовательно сумма чисел от 1 до n равна (1 + n) * (|n| + 2) / 2.

 

Пример

Пусть n = -4. Количество чисел от 1 до -4 равно |-4| + 2 = 6 (это числа -4, -3,    -2, -1, 0, 1). Сумма чисел от 1 до -4 равна

(1 + -4) * (|-4| + 2) / 2 = -3 * 6 / 2 = -9

 

Реализация алгоритма

Функция abs вычисляет модуль числа n.

 

long long abs(long long n)

{

return (n > 0) ? n : -n;

}

 

Основная часть программы. Обрабатываем несколько тестов.

 

while (scanf("%lld", &n), n)

{

 

Вычисляем ответ для положительного и для неположительного числа n.

 

  if (n >= 1) res = (1 + n) * n / 2;

  else res = (1 + n) * (abs(n) + 2) / 2;

 

Выводим ответ.

 

  printf("%lld\n", res);

}